#pragma comment (linker, "/STACK:100000000")
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <set>
using namespace std;
#define N 501
#define K 1000000
#define M 1000003
int gcd(int x, int y) { return !y?x:gcd(y, x%y); }
long long ab(long long x) { return x<0?-x:x; }
struct P
{
	int x, y;
	P(int x=0, int y=0): x(x), y(y) {}
};
P operator +(P a, P b) { return P(a.x+b.x, a.y+b.y); }
P operator -(P a, P b) { return P(a.x-b.x, a.y-b.y); }
P operator *(P a, int b) { return P(a.x*b, a.y*b); }
long long operator &(P a, P b) { return a.x*b.x+a.y*b.y; }
long long operator *(P a, P b) { return a.x*b.y-a.y*b.x; }
bool operator ==(P a, P b) { return a.x==b.x && a.y==b.y; }
bool operator <(P a, P b) { return a.x<b.x || (a.x==b.x && a.y<b.y); }
struct R
{
	double x, y;
	R(double x=0, double y=0): x(x), y(y) {}
};
R operator +(R a, R b) { return R(a.x+b.x, a.y+b.y); }
R operator -(R a, R b) { return R(a.x-b.x, a.y-b.y); }
double operator &(R a, R b) { return a.x*b.x+a.y*b.y; }
R p;
struct T
{
	long long px, py;
	T() {}
	T(long long x, long long y, int q)
	{
		int g;
		p=R((double)x/q, (double)y/q);
		g=gcd(q, ab(x)%q);
		px=x/g+1000000000000ll;
		px=px*2000000+q/g+1000000;
		g=gcd(q, ab(y)%q);
		py=y/g+1000000000000ll;
		py=py*2000000+q/g+1000000;
	}
};
bool operator ==(T a, T b) { return a.px==b.px && a.py==b.py; }
P t[N][4], y[3*N];
int f[N], q, h, hs[M+1000];
int v[N][3], d[K], en[6*K], ei[6*K], eh;
T m[K];
R r[K];
pair <double, int> w[3*N];
int e[4*K], c[2*K], g, z[4*K], b[4*K];
char u[4*K];
set <int> s;
void E(int &h, int t) { ei[eh]=t; en[eh]=h; h=eh++; } 
int in(P p, P *t)
{
	int i;
	for(i=0; i<3 && (t[i+1]-t[i])*(p-t[i])>=0; i++);
	return i==3;
}
void add(T t)
{
	int i;
	i=(t.px%M*1237371+t.py%M*7771231)%M;
	for(; hs[i] && !(m[hs[i]-1]==t); i++);
	if(!hs[i]) { r[h]=p; m[h]=t, hs[i]=h+1; h++; }
	q=hs[i]-1;
}
bool sec(P a, P b, P c, P d)
{
	int d0, d1, d2;
	d0=(b-a)*(d-c);
	d1=(c-a)*(d-c);
	d2=(c-a)*(b-a);
	if(!d0)
	{ 
		if(a==c || a==d) { d0=1; d1=0; }
		else if(b==c || b==d) { d0=1; d1=1; }
		else return 0;
	}
	else if(d0<0) { d0=-d0; d1=-d1; d2=-d2; }
	if(d1<0 || d1>d0 || d2<0 || d2>d0) return 0;
	add(T((long long)a.x*(d0-d1)+(long long)b.x*d1, (long long)a.y*(d0-d1)+(long long)b.y*d1, d0));
	return 1;
}
void edge(int i, int j, int k)
{
	if(i!=j)
	{
		c[g/2]=k;
		E(d[i], g); e[g++]=j;
		E(d[j], g); e[g++]=i;
	}
}
void dfs(int i)
{
	int j, t;
	s.clear();
	for(t=0, b[t++]=i; t; )
	{
		i=b[t-1];
		j=e[i];
		if(!u[i])
		{
			if(s.size()) f[-*s.begin()]=1;
			for(u[i]=1, j=z[i]; j!=i; u[j]=1, j=z[j]);
		}
		else
		{
			if(j&1)	s.erase(-c[j/2]);
			else s.insert(-c[j/2]);
		}
		for(j=z[j]; j!=i && u[j^1]; j=z[j]);
		if(j==i) t--;
		else
		{
			e[i]=j;
			if(j&1)	s.insert(-c[j/2]); 
			else s.erase(-c[j/2]);
			b[t++]=j^1;
		}
	}
}
int main()
{
	int i, j, k, l, nh, n;
	R a, b;
	for(scanf("%d", &n), i=0; i<n; i++)
	{
		for(j=0; j<3; scanf("%d%d", &t[i][j].x, &t[i][j].y), j++);
		t[i][3]=t[i][0];
		if((t[i][1]-t[i][0])*(t[i][2]-t[i][0])<0) swap(t[i][1], t[i][2]);
		for(j=0; j<i; f[j]|=in(t[j][0], t[i]) && in(t[j][1], t[i]) && in(t[j][2], t[i]), j++);
	}
	nh=0;
	for(i=0; i<n; i++)
		for(j=0; j<3; v[i][j]=-1, j++);
	for(i=0; i<n; i++)
		if(!f[i])
			for(k=0; k<3; k++)
			{
				add(T(t[i][k].x, t[i][k].y, 1));
				E(v[i][k], q);
				E(v[i][(k+2)%3], q);
				y[nh++]=t[i][k];
			}
	sort(y, y+nh);
	for(i=0; i<n; i++)
		if(!f[i])
			for(j=i+1; j<n; j++)
				if(!f[j])
					for(k=0; k<3; k++)
						for(l=0; l<3; l++)
							if(sec(t[i][k], t[i][k+1], t[j][l], t[j][l+1]))
							{
								E(v[i][k], q);
								E(v[j][l], q);
							}
	for(i=0; i<h; d[i]=-1, i++);
	for(i=0; i<n; i++)
		if(!f[i])
			for(k=0; k<3; k++)
			{
				a=R(t[i][k+1].x-t[i][k].x, t[i][k+1].y-t[i][k].y);
				b=R(t[i][k].x, t[i][k].y);
				for(l=0, j=v[i][k]; j>=0; w[l]=make_pair((r[ei[j]]-b)&a, ei[j]), j=en[j], l++);
				sort(w, w+l);
				for(j=0; j+1<l; edge(w[j].second, w[j+1].second, i), j++);
			}
	for(i=0; i<h; i++)
	{
		for(l=0, j=d[i]; j>=0; a=r[e[ei[j]]]-r[i], w[l]=make_pair(atan2(a.y, a.x), ei[j]), j=en[j], l++);
		sort(w, w+l); w[l]=w[0];
		d[i]=w[0].second;
		for(j=0; j<l; z[w[j+1].second^1]=w[j].second, j++);
	}
	for(i=0; i<n; f[i]=0, i++);
	for(i=0; i<g; e[i]=i, i++);
	for(i=0; i<nh; i++)
	{
		add(T(y[i].x, y[i].y, 1));
		j=d[q]^1;
		if(!u[j]) dfs(j);
	}
	for(j=0, i=0; i<n; j+=f[i], i++);
	for(printf("%d\n", j), i=0; i<n; i++)
		if(f[i]) printf("%d ", i+1);
	printf("\n");
	return 0;
}